namespace ConsoleApp1;

public class Checked
{
    //checked 和 unchecked 语句指定整型类型算术运算和转换的溢出检查上下文。 当发生整数算术溢出时，溢出检查上下文将定义发生的情况。
    //在已检查的上下文中，引发 System.OverflowException；如果在常数表达式中发生溢出，则会发生编译时错误。
    //在未检查的上下文中，会通过丢弃任何不适应目标类型的高序位来将操作结果截断。 例如，在加法示例中，它将从最大值包装到最小值。 以下示例显示了已检查和未检查上下文中的相同操作：
    public static void t1()
    {
        uint a = uint.MaxValue;

        unchecked
        {
            Console.WriteLine(a + 3); // output: 2
        }

        checked
        {
            Console.WriteLine(a + 3);
        }

        try
        {
            checked
            {
                Console.WriteLine(a + 3);
            }
        }
        catch (OverflowException e)
        {
            Console.WriteLine(e.Message); // output: Arithmetic operation resulted in an overflow.
        }
    }
}